package com.tp.utils;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.jfinal.upload.UploadFile;
import com.tp.config.SysConfig;
import com.jfinal.core.Controller;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.Ret;

public class UploadFileUtil {

	// 图片上传文件夹
	private static String uploadPath = SysConfig.baseUploadPath;
	
	/**
	 * 
	 * @param paramName 文件框名
	 * @param folder 文件上传文件夹
	 * @param controller
	 * @return
	 */
	public static Ret UploadFile(String paramName, String folder, Controller controller) {
		// 文件上传大小设置为20mb,此处不是单个文件大小，是指上传文件总大小
		String encoding = "UTF-8";
		Integer maxSize = 1024 * 1024 * 1;
		
		String basePath = File.separator + "image";
		String url = getDirUrl(folder);
		String path = basePath + url;
		UploadFile file = null;
		try {
			file = controller.getFile(paramName, path, maxSize, encoding);
		} catch (Exception e) {
			System.out.println("文件大小异常：" + e);//自定义打印
			return Ret.by("code", 1).set("msg", "上传图片总大小不得大于1MB");
		}
		if (StrUtils.empty(file)) {
			return Ret.by("code", 1).set("msg", "没有获取到上传文件！");
		} else {
			String newName = getFileName(file.getFileName());
			File destFile = new File(PathKit.getWebRootPath() + File.separator + uploadPath + path + newName);
			//判断文件夹是否存在
			if (!destFile.getParentFile().exists()) {
				destFile.getParentFile().mkdirs();// 创建文件夹
			}
			// file文件存在则删除并执行上传，不存在则直接执行上传
			/*
			if (destFile.exists()) {
				// 删除旧文件
				destFile.delete();
			}*/
			File srcFile = file.getFile();
			srcFile.renameTo(destFile);
			return Ret.by("code", 1).set("imgUrl", getUrl(path, newName));
		}
	}

	// 形成保存路径的url也是访问路径 /img/folder/20170410/
	private static String getDirUrl(String folder) {
		String dateFolder = new SimpleDateFormat("yyyyMMdd").format(new Date());
		return File.separator + folder + File.separator + dateFolder + File.separator;
	}

	// 生成新的名字
	private static String getFileName(String newName) {
		return new Date().getTime() + newName.substring(newName.lastIndexOf("."));
	}

	// 返回图片最终的 url
	private static String getUrl(String url, String name) {
		return File.separator + uploadPath + url + name;
	}
}
